home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / custom-bib / genbst.mbs (.txt) < prev    next >
LaTeX Document  |  1994-04-21  |  75KB  |  2,406 lines

  1. %\iffalse
  2. %/////////////////////////////////////////
  3. %   Generic bibliography style           /
  4. %   for both author-year and numerical   /
  5. %   for natbib, harvard, astron styles   /
  6. %   authordate, and apalike              /
  7. %/////////////////////////////////////////
  8. % This file is self-documenting: simply LaTeX it!
  9. %% (Here are the specifications of the source file)
  10. %<*selfdoc>
  11. \ifx\undefined\endoptions\def\next{%
  12.    \documentstyle[a4,11pt,doc]{article}%
  13.    \def\skipguard##1>{}\MakePercentIgnore\skipguard}\else\let\next\relax\fi
  14. \next
  15. %</selfdoc>
  16. %% \def\filename{genbst.mbs}
  17. %% \def\filedate{1994 February 7}
  18. %% \def\fileversion{1.2}
  19. %  \def\docdate{1994 February 7}
  20. %\iffalse
  21. %   For use with docstrip to select various style parameters
  22. %   Default is an author-year bib style designed for my natbib.sty,
  23. %     which can also handle numerical citations.
  24. %%   For use with BibTeX version 0.99a or later, LaTeX version 2.09
  25. %%-------------------------------------------------------------------
  26. %% NOTICE:
  27. %% This file may be used for non-profit purposes.
  28. %% It may not be distributed in exchange for money, 
  29. %%   other than distribution costs.
  30. %%   
  31. %% The author provides it `as is' and does not guarantee it in any way.
  32. %% Copyright (C) 1993 Patrick W. Daly
  33. %% Max-Planck-Institut f\"ur Aeronomie
  34. %% Postfach 20
  35. %% D-37189 Katlenburg-Lindau
  36. %% Germany
  37. %% E-mail:
  38. %% SPAN--     nsp::linmpi::daly    (note nsp also known as ecd1)
  39. %% Internet-- daly@linmpi.dnet.gwdg.de   
  40. %%-----------------------------------------------------------
  41. %% \CharacterTable
  42. %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
  43. %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  44. %%   Digits        \0\1\2\3\4\5\6\7\8\9
  45. %%   Exclamation   \!     Double quote  \"     Hash (number) \#
  46. %%   Dollar        \$     Percent       \%     Ampersand     \&
  47. %%   Acute accent  \'     Left paren    \(     Right paren   \)
  48. %%   Asterisk      \*     Plus          \+     Comma         \,
  49. %%   Minus         \-     Point         \.     Solidus       \/
  50. %%   Colon         \:     Semicolon     \;     Less than     \<
  51. %%   Equals        \=     Greater than  \>     Question mark \?
  52. %%   Commercial at \@     Left bracket  \[     Backslash     \\
  53. %%   Right bracket \]     Circumflex    \^     Underscore    \_
  54. %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
  55. %%   Right brace   \}     Tilde         \~}
  56. % \CodelineIndex
  57. % \OnlyDescription
  58. % \setcounter{StandardModuleDepth}{1}
  59. % \begin{document}
  60. % \setcounter{IndexColumns}{2}
  61. % \setlength{\IndexMin}{10cm}
  62. % \changes{1.0}{1993 Aug 16}{Initial version}
  63. % \changes{1.2}{1994 Feb 7}{Add {\tt thtit-a} to format thesis titles 
  64. %         as articles, not books}
  65. % \pagestyle{headings}
  66. % \title{\bf A Generic Bibliographic Style File}
  67. %    
  68. % \author{Patrick W. Daly\thanks{E-mail: {\tt daly@linmpi.dnet.gwdg.de}}\\
  69. %         Max-Planck-Institut f\"ur Aeronomie\\
  70. %         D--37189 Katlenburg-Lindau, Germany}
  71. %         
  72. % \date{This paper describes file {\tt\lowercase\expandafter{\filename}},\\
  73. %  version \fileversion{} from \filedate{},\\
  74. %  documentation from \docdate.}
  75. % \maketitle
  76. % \MakeShortVerb{\|}
  77. % \parskip=1ex \parindent=0pt
  78. % \newcommand{\btx}{{\sc Bib}\TeX}
  79. % \section{Introduction}
  80. % This generic, or master, \btx{} style file is intended to be used with
  81. % {\tt docstrip} in order to produce actual {\tt.bst} files. By selecting
  82. % desired options, the output is customized to the particular requirements
  83. % needed.
  84. % The file has been assembled from Oren Patashnik's standard files {\tt
  85. % plain.bst} and {\tt unsrt.bst}, plus his non-standard file {\tt
  86. % apalike.bst}. This last is an author-year citation style, although
  87. % somewhat imperfect. I have added a number of other options and codings to
  88. % produce the features that I deem necessary.
  89. % \section{About Master Bibliographic Style Files}
  90. % \subsection{The {\tt docstrip} Options}
  91. % This master file is a \btx{} bibliographic style file containing
  92. % alternative coding depending on {\tt docstrip} options. The options are
  93. % selected when {\tt docstrip} is run, either interactively or through a
  94. % batch job. 
  95. % Suppose that one of the options is called {\tt xyz}. Then the following
  96. % alternatives are possible:
  97. % \begin{quote}
  98. % |%<xyz> | \em one line of coding
  99. % \end{quote}
  100. % {\em includes\/} the single line of coding;
  101. % \begin{quote}
  102. % |%<!xyz> | \em one line of coding 
  103. % \end{quote}
  104. % {\em excludes\/} the single line;
  105. % \begin{quote}
  106. % |%<*xyz> | \\
  107. % {\em several lines of coding}\\
  108. % |%</xyz> | 
  109. % \end{quote}
  110. % {\em includes\/} all the bracketted lines;
  111. % \begin{quote}
  112. % |%<*!xyz> | \\
  113. % {\em several lines of coding}\\
  114. % |%</!xyz> | 
  115. % \end{quote}
  116. % {\em excludes\/} all the bracketted lines.
  117. % Options may be logically combined: the symbol \verb!|! is a logical {\sf
  118. % or}, |&| a logical {\sf and}, |!| a logical {\sf not}; parentheses {\tt(}
  119. % and {\tt)} may be used to group options.
  120. % \subsection{The {\tt docstrip} Batch Job}
  121. % In order to generate a true \btx{} style file with selected options from
  122. % this master file, it is necessary to run a {\tt docstrip} batch job.
  123. % Suppose that the master file is named {\tt master.mbs}, and the
  124. % resulting \btx{} style file is to be {\tt silly.bst}, and the batch job
  125. % file itself is called {\tt silly.drv}. To produce this with options, say,
  126. % {\tt xyz} and {\tt abc}, the batch job would look something like:
  127. % \begin{quote}\begin{verbatim}
  128. % \def\batchfile{silly.drv}
  129. % \input docstrip
  130. % \preamble
  131. % This is for Journal of Silly Results
  132. % \endpreamble
  133. % \postamble
  134. % End of customized bst file
  135. % \endpostamble
  136. % \keepsilent
  137. % \generateFile{silly.bst}{f}{\from{master.mbs}{xyz,abc}}
  138. % \end{verbatim}
  139. % \end{quote}
  140. % A preamble is not necessary, although it is advisable to include some
  141. % statement about the application of the bibliographic style. A postamble
  142. % {\em is\/} vital, otherwise the default will add |\endinput| at the end
  143. % of the file, something that \btx{} will not understand. The |\keepsilent|
  144. % is optional and just suppresses {\tt docstrip} output during processing.
  145. % \subsection{The {\tt makebst} Program}
  146. % The program {\tt makebst} simplifies the creation of the batch job file. To
  147. % do that, it needs information on the available options. This information
  148. % must be stored in a special format, either in the master file itself, or
  149. % in a file with the same root name but extension {\tt.opt}. The form of
  150. % this format is described in the documentation on {\tt makebst}.
  151. % In the master file, this information must be enclosed within {\tt docstrip}
  152. % options |%<*options>| \dots |%</options>| and {\em must\/} include an
  153. % |\endoptions| command. It may also include any number of comments. 
  154. % A sample menu in the master file to select one or none of options {\tt
  155. % xyz} {\em or\/} {\tt zyx} would look thus:
  156. % \begin{quote}\begin{verbatim}
  157. % %<*options>
  158. % \mes{Select one of these}
  159. % \optdef{f}{xyz}{Option forword}{to do forward stuff}
  160. % \optdef{r}{zyx}{Option reverse}{to do reverse stuff}
  161. % \optdef{*}{}{None of the above}{}
  162. % \getans
  163. % \endoptions
  164. % %</options>
  165. % %<*!options>
  166. % . . . . . . 
  167. % %</!options>
  168. % \end{verbatim}
  169. % \end{quote}
  170. % An explanation of these commands is to be found in the documentation on 
  171. % {\tt makebst}.
  172. % The menu information may be extracted from the master file by means of
  173. % {\tt docstrip} and stored in a file with extension {\tt.opt}. If this
  174. % file is missing, the program tries to read it from the master file.
  175. % \section{The Options}
  176. % Here I present a list of all the {\tt docstrip} options that are
  177. % available (except for {\tt options} itself). I have tried to avoid
  178. % conflicts with mutually exclusive options by always letting one dominate.
  179. % For example, if {\tt a} and {\tt b} are to be mutually exclusive, then
  180. % the three possibilities are:
  181. % \begin{quote}\begin{tabular}{rl}
  182. % neither &  \tt\%<!a\&!b> \\
  183. % {\tt a} only & \tt\%<a> \\
  184. % {\tt b} only & \tt\%<!a\&b>
  185. % \end{tabular}\end{quote}
  186. % so that if both {\tt a} and {\tt b} have been selected, the result is as
  187. % if only {\tt a} had been given. (If one uses {\tt makebst} to produce the
  188. % {\tt docstrip} batch job, then it is impossible to give mutually
  189. % exclusive options.)
  190. % Most mutually exclusive options have the same prefix before the hyphen.
  191. % \newenvironment{opt}{%
  192. % \begin{list}{}{\labelwidth2cm \leftmargin2.5cm \labelsep1em \rightmargin0pt
  193. %  \def\makelabel##1{\tt ##1 \hfill}}}{\end{list}}
  194. % {\bf Citation style:} whether or not a numerical or author-year system 
  195. % is to be used.
  196. % \begin{opt}
  197. % \item[--] default is numerical, standard \LaTeX, as for {\tt
  198. %           plain.bst}.\\
  199. %           |\bibitem{key}...|
  200. % \item[cite] special for listing entire databases; the cite key is used 
  201. %             as the label so it may be listed.\\
  202. %             |\bibitem[key]{key}...|
  203. % \item[ay] for author-year style of citations. Various forms of |\bibitem|
  204. %           are provided under this option, to support different types
  205. %           of \LaTeX{} styles for interfacing with the author-year system.
  206. % \end{opt}
  207. % If {\tt ay} has been selected, then the type of author-year interface
  208. % is selectable.
  209. % \begin{opt}
  210. % \item[--] default is the system I invented for my {\tt natbib.sty}.\\
  211. %            |\bibitem[author(year)]{key}...|   
  212. % \item[alk] for the {\tt apalike.sty} of Oren Patashnik and related
  213. %            systems\\
  214. %            |\bibitem[author, year]{key}...|
  215. % \item[har] for the Harvard family of styles (with {\tt harvard.sty}).\\
  216. %            |\harvarditem[short]{long}{year}{key}...|
  217. % \item[ast] for astronomy family of styles (with {\tt astron.sty}).\\
  218. %            |\bibitem[\protect\astroncite{author}{year}]{key}...|
  219. % \item[cay] for the Chicago family of styles (with {\tt chicago.sty}).\\
  220. %            |\bibitem[\protect\citeauthoryear{long}{short}{year}]{key}...|
  221. % \item[cn] for the ``author-date'' group of styles (with {\tt
  222. %            authordate1-4.sty})\\
  223. %            |\bibitem[\protect\citename{author, }year]{key}...|
  224. % \end{opt}
  225. % {\bf Sequence:} the order in which the references are listed.
  226. % \begin{opt}
  227. % \item[--]      default is alphabetical by all authors, date, title
  228. % \item[seq-no]  (numerical only) sequence by citation order
  229. % \item[seq-lab] (author-year) by label, date, title (means that Daly 
  230. %                precedes Daly and Williams, precedes Daly et al.)
  231. % \end{opt}
  232. % {\bf Names formatting:} how initials and surnames are to be combined.
  233. % \begin{opt}
  234. % \item[--]       default is full names, given names first
  235. % \item[nm-init]  initials plus surname
  236. % \item[nm-rev]   surname plus initials
  237. % \item[nm-rev1]  surname plus initials (1st name only) then initials 
  238. %                 plus surname
  239. % \item[nm-rv]    as {\tt nm-rev}, but initials without dots
  240. % \end{opt}
  241. % {\bf Number of names:} normally all names listed (in reference list)
  242. % \begin{opt}
  243. % \item[nmlm]     limit number of names
  244. % \item[x1...x9]  (with {\tt nmlm}) maximum number of names to appear
  245. % \item[m1...m5]  (with {\tt nmlm}) minimum number before `et al' written;
  246. %                 no check for consistency is taken; one {\tt x} and 
  247. %                 one {\tt m} number must be given, and {\tt x}$\le${\tt m}
  248. % \end{opt}
  249. % {\bf Names font:} in the reference list
  250. % \begin{opt}
  251. % \item[--]       default is names in normal type face
  252. % \item[nmft-sc]  names in small caps
  253. % \item[nmft-it]  names in italics   
  254. % \item[nmft-bf]  names in bold      
  255. % \end{opt}
  256. % {\bf Block punctuation:} between logical sections (not mutually
  257. % exclusive)
  258. % \begin{opt}
  259. % \item[--]       default is period after each logical section, including end
  260. % \item[blk-com]  use commas, except at very end (changes `In' to `in')
  261. % \item[blk-tit]  use commas, except after a title and very end
  262. % \item[in-col]   puts a colon after `In' or `in' for edited works
  263. % \item[fin-bare] no punctuation at the very end
  264. % \end{opt}
  265. % {\bf Date:} position and enclosure
  266. % \begin{opt}
  267. % \item[--]       default is date at end, before notes; for author-year,
  268. %                   date consists only of year, no month
  269. % \item[dt-beg]   date goes after authors' names (author-year only)
  270. % \item[dt-end]   date goes after any notes
  271. % \item[yr-par]   no month, year in parentheses ()
  272. % \item[yr-brk]   no month, year in brackets []
  273. % \item[yr-col]   no month, year preceded by colon and space
  274. % \end{opt}
  275. % {\bf Article in journal:} style of title, volume, pages
  276. % \begin{opt}
  277. % \item[--]       default is: Title. {\it Journal}, vol(num):p1--p2
  278. % \item[vol-bf]   volume in bold
  279. % \item[vol-it]   volume in italics
  280. % \item[vol-2bf]  volume and number bold
  281. % \item[volp-com] comma and space instead of colon:   vol(num), p1--p2
  282. % \item[jpg-1]    only starting page given
  283. % \item[jnm-x]    no punctuation after journal name
  284. % \item[tit-it]   article title in italics
  285. % \item[tit-q]    article title in single quotes
  286. % \item[tit-qq]   article title in double quotes
  287. % \item[jtit-x]   no article title (applies only to journals and 
  288. %                 collections)
  289. % \item[atit-u]   article title capitalized as in entry, default is
  290. %                 sentence capitalization (first word and words following
  291. %                 colons)
  292. % \end{opt}
  293. % {\bf Thesis title:} formatted like a book or article
  294. % \begin{opt}
  295. % \item[--]       default is like a book title
  296. % \item[thtit-a]  titles of PhD and Master theses formatted like articles
  297. % \end{opt}
  298. % {\bf Book title:} font style
  299. % \begin{opt}
  300. % \item[--]       default is italicized
  301. % \item[btit-rm]  book title plain
  302. % \end{opt}
  303. % {\bf Abbreviations:} of various words, default is no abbreviations
  304. % \begin{opt}
  305. % \item[pp]       abbreviate `page(s)' as `p.' and `pp.'
  306. % \item[ed]       abbreviate `editor(s)' as `ed.' and `eds.'
  307. % \item[abr]      abbreviate `volume', `edition', `technical report', etc.
  308. % \end{opt}
  309. % {\bf Editor:} alternative for {\em in edited\/} work
  310. % \begin{opt}
  311. % \item[--]       in {\em names\/}, editors, {\em title}
  312. % \item[edby]     in {\em title\/}, edited by {\em names}
  313. % \end{opt}
  314. % {\bf Citation label:} what is written by the |\cite| command
  315. % \begin{opt}
  316. % \item[--]       default is no special font
  317. % \item[lab-it]   label (names printed by |\cite|) in italics
  318. % \item[xlab-it]  extra label (letter after year) in italics
  319. % \end{opt}
  320. % {\bf Emphasis:} defines what `italicized' really means
  321. % \begin{opt}
  322. % \item[--]       default is |\em| (can switch between |\it| 
  323. %                 and |\rm|
  324. % \item[em-it]    use |\it| instead (always italic)
  325. % \item[em-x]     no emphasis
  326. % \end{opt}
  327. % {\bf Special punctuation:} 
  328. % \begin{opt}
  329. % \item[amper]    use \& in place of `and'
  330. % \item[and-xcom] no comma before last `and' of an author list
  331. % \item[and-com]  add comma before `and' even for two authors
  332. % \item[and-x]    no `and' in an author list (in list of references)
  333. % \item[etal-it]  `et al.' in italics
  334. % \end{opt}
  335. % \section{The Menu Information}
  336. % Here I describe the options and menu information for this particular
  337. % master file.
  338. % All this menu information is nested between {\tt docstrip} guard options
  339. % |%<*options>| \dots\ |%</options>|, and the last command is
  340. % |\endoptions|. The rest of the file is nested between |%<*!options>|
  341. % \dots\ |%</!options>| in order to exclude it if {\tt docstrip} is used to
  342. % extract only the menu information.
  343. % \subsection*{Author-year or numerical}
  344. % The first question is whether a numerical or author-year citation style
  345. % is to be used. If the latter, the supporting system is my {\tt
  346. % natbib.sty}, which expects |\bibitem| to have an optional argument
  347. % containing the short form of the authors, plus year in parentheses.
  348. % E.g.,
  349. % \begin{quote}
  350. % |\bibitem[Daly et al.(1990)]{key}...|
  351. % \end{quote}
  352. % Other systems are also supported, such as the Harvard family of
  353. % bibliography styles (with {\tt harvard.sty}), which have entries in the
  354. % form
  355. % \begin{quote}
  356. % |\harvarditem[Daly et al.]{Daly, Keppler,|\\
  357. % |       and Williams}{1990}{key}...|
  358. % \end{quote}
  359. % or the astronomy family (with {\tt astron.sty}) with entries like
  360. % \begin{quote}
  361. % |\bibitem[\protect\astroncite{Daly et al.}{1990}]{key}...|
  362. % \end{quote}
  363. % or the Chicago family (with {\tt chicago.sty}) with entries like
  364. % \begin{quote}
  365. % |\bibitem[\protect\citeautheryear{Daly, Keppler, and|\\
  366. % |      Williams}{Daly et al.}{1990}]{key}...|
  367. % \end{quote}
  368. % or the so-called ``author-date'' group (with {\tt authordate1-4.sty})
  369. % with entries of the form
  370. % \begin{quote}
  371. % |\bibitem[\protect\citename{Daly et al.}1990]{key}...|
  372. % \end{quote}
  373. % Finally, there is the {\tt apalike} format of Oren Patashnik, for use
  374. % with {\tt apalike.sty} that has entries of the form
  375. % \begin{quote}
  376. % |\bibitem[Daly et al., 1990]{key}...|
  377. % \end{quote}
  378. % In addition to numerical or author-year citation styles, there is also a
  379. % {\tt cite} style available in which the label is the same as the cite
  380. % key. This is for listing entire contents of databases with the cite key
  381. % visible. 
  382. % A flag |\ifnumerical| is established because some of the following menu
  383. % features depend on which system is to be used.
  384. %    \begin{macrocode}
  385. %<*options>
  386. \newif\ifnumerical \numericalfalse
  387. \mes{^^JSTYLE OF CITATIONS:}
  388. \optdef{*}{}{Numerical}{as in standard LaTeX}
  389. \optdef{a}{ay}{Author-year}{with some non-standard interface}
  390. \optdef{c}{cite}{Cite key}{(special for listing contents of bib file)}
  391. \getans
  392. \numericaltrue
  393. \if\ans a\numericalfalse\fi
  394. \ifnumerical\else
  395. \mes{^^JAUTHOR-YEAR SUPPORT SYSTEM:}
  396. \optdef{*}{}{Natbib}{for use with natbib.sty}
  397. \optdef{l}{alk}{Apalike}{for use with apalike.sty}
  398. \optdef{h}{har}{Harvard}{system with harvard.sty}
  399. \optdef{a}{ast}{Astronomy}{system with astron.sty}
  400. \optdef{c}{cay}{Chicago}{system with chicago.sty}
  401. \optdef{d}{cn}{Author-date}{system with authordate1-4.sty}
  402. \getans\fi
  403. %    \end{macrocode}
  404. % \subsection*{Ordering of the listed references}
  405. %   Choices here depend on citation style. The default in both cases is
  406. % alphabetical order of all authors. For numerical style, one may also
  407. % choose an unsorted order, which means the order the same as the original
  408. % citations. This corresponds to {\tt unsrt.bst}.
  409. % For author-year, the second choice is by label. (The label is the
  410. % optional |\bibitem| argument, and is what is printed in place of the
  411. % |\cite| command.) With this option, all the papers with the same first
  412. % author are ordered so that the one-author papers come first, followed by
  413. % the two-author papers, followed by the multiple-author papers. This is a
  414. % more sensible system for author-year citations, and is demanded by some
  415. % journals (like JGR).
  416. %    \begin{macrocode}
  417. \ifnumerical
  418. \mes{^^JORDERING OF REFERENCES:}
  419. \optdef{*}{}{Alphabetical}{by all authors}
  420. \optdef{c}{seq-no}{Citation order}{(unsorted, like unsrt.bst)}
  421. \getans
  422. \else
  423. \mes{^^JORDERING OF REFERENCES:}
  424. \optdef{*}{}{Alphabetical}{by all authors}
  425. \optdef{l}{seq-lab}{By label}%
  426.    {(Jones before Jones and James before Jones et al)}
  427. \getans
  428. %    \end{macrocode}
  429. % \subsection*{Formatting author names}
  430. % The default is that the full names of the authors are listed, given names
  431. % first, unabbreviated. Of course, if only the initials have been given in
  432. % the {\tt.bib} file, then that is all that can appear in the list. Other
  433. % possibilities are to use initials (even if full names in the {\tt.bib}
  434. % file) either before or after the surnames. A specialty of the journals of
  435. % the American Geophysical Union is to have only the first name with
  436. % reversed initials.
  437. %    \begin{macrocode}
  438. \mes{^^JAUTHOR NAMES:}
  439. \optdef{*}{}{Full, surname last}{(John Frederick Smith)}
  440. \optdef{i}{nm-init}{Initials + surname}{(J. J. Smith)}
  441. \optdef{r}{nm-rev}{Surname + initials}{(Smith, J. J.)}
  442. \optdef{s}{nm-rv}{Surname + dotless initials}{(Smith JJ)}
  443. \optdef{a}{nm-rev1}{Only first name reversed}%
  444.    {(AGU style: Smith, J. J., H. K. Jones)}
  445. \getans
  446. %    \end{macrocode}
  447. % \subsection*{Number of authors}
  448. % Normally the complete list of authors as given in the {\tt.bib} file are
  449. % presented in the reference list. However, some journals prefer to limit
  450. % them to a maximum. If there are more than this maximum number of author
  451. % names, then a minimum number plus `et al.' are listed.
  452. % Because no test for consistency of the numbers is carried out in the
  453. % {\tt.bst} file itself (it might be possible, but I found it too complex),
  454. % this is done here.
  455. %    \begin{macrocode}
  456. \mes{^^JNUMBER OF AUTHORS:}
  457. \optdef{*}{}{All authors}{included in listing}
  458. \optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)}
  459. \getans
  460. \if\ans l
  461. \loop
  462.   \ask{\num}{Maximum number of authors (1-9)}
  463.   \ifnum\num>9
  464.   \mes{*** Must be between 1 and 9}
  465. \repeat
  466. \wr{\spsp\spsp\sep x\num\pc: Maximum of \num\space authors}
  467. \mes{\spsp You have selected maximum \num\space authors}
  468. \ifnum\num>5\def\numx{5}\else\edef\numx{\num}\fi
  469. \loop
  470.   \ask{\num}{Minimum number (before et al given) (1-\numx)}
  471.   \ifnum\num>\numx
  472.   \mes{*** Must be between 1 and \numx}
  473. \repeat
  474. \wr{\spsp\spsp\sep m\num\pc: Minimum of \num\space authors}
  475. \mes{\spsp You have selected minimum \num\space authors}
  476. %    \end{macrocode}
  477. % \subsection*{Type face of names}
  478. % The author names in the list of references normally appear in the current
  479. % type face. This may be changed to small caps, bold, or italics.
  480. %    \begin{macrocode}
  481. \mes{^^JTYPEFACE FOR AUTHORS:}
  482. \optdef{*}{}{Normal font for authors}{}
  483. \optdef{s}{nmft-sc}{Small caps authors}{(\string\sc)}
  484. \optdef{i}{nmft-it}{Italic authors}{(\string\it\space or \string\em)}
  485. \optdef{b}{nmft-bf}{Bold authors}{(\string\bf)}
  486. \getans
  487. %    \end{macrocode}
  488. % \subsection*{Position of date}
  489. % This applies to author-year style only. It makes sense to put the date
  490. % immediately after the author list, since the two items (author and year)
  491. % are the identifiers of the reference. Default position is at the
  492. % end of the references, before any notes. It is also possible to place
  493. % it even after the notes.
  494. %    \begin{macrocode}
  495. \ifnumerical\else
  496. \mes{^^JDATE POSITION:}
  497. \optdef{*}{}{Date at end}{}
  498. \optdef{b}{dt-beg}{Date after authors}{}
  499. \optdef{e}{dt-end}{Date at very end}{after any notes}
  500. \getans
  501. %    \end{macrocode}
  502. % \subsection*{Format of date}
  503. % The year may be enclosed in parentheses, brackets, or preceded by a
  504. % colon. If none of these are selected, the date (month plus year) appears. 
  505. % For author-year, the date always consists only of the year, no month.
  506. %    \begin{macrocode}
  507. \mes{^^JDATE FORMAT:}
  508. \ifnumerical
  509. \optdef{*}{}{Month and year}{without any brackets}
  510. \else
  511. \optdef{*}{}{Year plain}{without any brackets}
  512. \optdef{p}{yr-par}{Year in parentheses}{no month, as (1993)}
  513. \optdef{b}{yr-brk}{Year in brackets}{no month, as [1993]}
  514. \optdef{c}{yr-col}{Year preceded by colon}{no month, as : 1993}
  515. \getans
  516. %    \end{macrocode}
  517. % \subsection*{Article title in journal}
  518. % The title of an article in a journal or in a collection (a book, or
  519. % conference proceedings) may appear plain, in italics, within single
  520. % or double quotes. 
  521. % Furthermore, it may have sentence capitalization (first
  522. % word and word following colon) or be capitalized as in the {\tt.bib} file
  523. % entry. That is why it is recommended to capitalize the entry text as it
  524. % should appear when fully capitalized, putting words that are always
  525. % capitalized in braces. Example:
  526. % \begin{quote}
  527. % |TITLE="The Results of the {Giotto} Mission"|
  528. % \end{quote}
  529. % which produces either ``The results of the Giotto mission'' or ``The
  530. % Results of the Giotto Mission'', depending on option.
  531. % Additionally, the article titles may be fully suppressed.
  532. %    \begin{macrocode}
  533. \mes{^^JTITLE OF ARTICLE:}
  534. \optdef{*}{}{Title plain}{with no special font}
  535. \optdef{i}{tit-it}{Title italic}{(\string\em)}
  536. \optdef{q}{tit-q}{Title in single quotes}{(`Title')}
  537. \optdef{d}{tit-qq}{Title in double quotes}{(``Title'')}
  538. \getans
  539. \mes{^^JCAPITALIZATION OF ARTICLE TITLE:}
  540. \optdef{*}{}{First and important words}{in capitals}
  541. \optdef{u}{atit-u}{Capitalized}{as in bib entry}
  542. \getans
  543. \mes{^^JARTICLE TITLE PRESENT:}
  544. \optdef{*}{}{Article title present}{in journals and proceedings}
  545. \optdef{x}{jtit-x}{No article title}{}
  546. \getans
  547. %    \end{macrocode}
  548. % \subsection*{Title of Theses}
  549. % The title of a these (PhD or Master's) is normally treated the same
  550. % as that of a book. Optionally, it may be formatted like that of 
  551. % an article.
  552. %    \begin{macrocode}
  553. \mes{^^JTHESIS TITLE:}
  554. \optdef{*}{}{Thesis titles like books}{}
  555. \optdef{a}{thtit-a}{Thesis title like article}{}
  556. \getans
  557. %    \end{macrocode}
  558. % \subsection*{Journal reference}
  559. % Great diversity of opinion exists as to how a journal reference is to be
  560. % formatted. It consists of a volume, possibly a number, and page limits.
  561. % The number is really only necessary if the page numbers within one volume
  562. % start at 1 for each physical `number'. Since journals are often bound
  563. % together in one volume later, it makes more sense to number the pages
  564. % continuously through the whole volume. However, this is not always so,
  565. % and then the `number' is necessary for the full specification.
  566. % A number of styles for journal specifications are
  567. % \begin{quote}
  568. % 21(2):33--55\\
  569. % {\bf 21}(2):33--55\\
  570. % {\it 21}(2), 33--55
  571. % \end{quote}
  572. % Here both start and stop page numbers have been given; often only the
  573. % start page is wanted.
  574. % Finally, it is possible to decide whether the journal name should be
  575. % separated from the following specifications with a blank or comma.
  576. %    \begin{macrocode}
  577. \mes{^^JJOURNAL VOLUME NUMBER:}
  578. \optdef{*}{}{Volume plain}{as vol(num)}
  579. \optdef{i}{vol-it}{Volume italic}{as {\string\em\space vol}(num)}
  580. \optdef{b}{vol-bf}{Volume bold}{as {\string\bf\space vol}(num)}
  581. \optdef{d}{vol-2bf}{Volume and number bold}{as {\string\bf\space vol(num)}}
  582. \getans
  583. \mes{^^JVOLUME PUNCTUATION:}
  584. \optdef{*}{}{Volume with colon}{as vol(num):}
  585. \optdef{c}{volp-com}{Volume with comma}{as vol(num),}
  586. \getans
  587. \mes{^^JPAGE NUMBERS:}
  588. \optdef{*}{}{Start and stop page numbers}{given}
  589. \optdef{f}{jpg-1}{Only start page number}{}
  590. \getans
  591. \mes{^^JJOURNAL NAME PUNCTUATION:}
  592. \optdef{*}{}{Comma after journal}{name}
  593. \optdef{x}{jnm-x}{Space after journal}{name}
  594. \getans
  595. %    \end{macrocode}
  596. % \subsection*{Book title}
  597. % The title of a book (as opposed to an article in a book or journal) is
  598. % normally italicized. This may be set to the regular font.
  599. %    \begin{macrocode}
  600. \mes{^^JBOOK TITLE:}
  601. \optdef{*}{}{Book title italic}{(\string\em)}
  602. \optdef{p}{btit-rm}{Book title plain}{(no font command)}
  603. \getans
  604. %    \end{macrocode}
  605. % \subsection*{Edited by}
  606. % For an article within an edited collection, the normal form is 
  607. % \begin{quote}
  608. % In J. K. James, editor, {\em Title of Collection} \dots
  609. % \end{quote}
  610. % An alternative is the form
  611. % \begin{quote}
  612. % In {\em Title of Collection}, edited by J. K. James \dots
  613. % \end{quote}
  614. %    \begin{macrocode}
  615. \mes{^^JEDITOR STYLE:}
  616. \optdef{*}{}{Word editor}{after name of editor}
  617. \optdef{b}{edby}{Edited by}{before name of editor}
  618. \getans
  619. %    \end{macrocode}
  620. % \subsection*{Block punctuation}
  621. % Blocks are logical sections of the reference specification, such as the
  622. % author block, the journal block, editor block, etc. These are normally
  623. % separated by periods, but alternatively a comma may be used. Another
  624. % choice is to use commas except after titles where a period is given.
  625. %    \begin{macrocode}
  626. \mes{^^JPUNCTUATION BETWEEN SECTIONS (BLOCKS):}
  627. \optdef{*}{}{Period after blocks}{of authors, title, etc}
  628. \optdef{c}{blk-com}{Comma after blocks}{}
  629. \optdef{t}{blk-tit}{Only titles with period}{but other blocks commas}
  630. \getans
  631. %    \end{macrocode}
  632. % \subsection*{`In' with colon}
  633. % When referring to works in a collection, one begins the block describing
  634. % that collection with `In'. Optionally, one may add a colon.
  635. %    \begin{macrocode}
  636. \mes{^^JPUNCTUATION AFTER `IN':}
  637. \optdef{*}{}{Space after `in'}{for editted works or proceedings}
  638. \optdef{c}{in-col}{Colon after `in'}{(as `In: ...')}
  639. \getans
  640. %    \end{macrocode}
  641. % \subsection*{Final punctuation}
  642. % The punctuation at the end of the reference is normally a period. This
  643. % may be suppressed.
  644. %    \begin{macrocode}
  645. \mes{^^JFINAL PUNCTUATION:}
  646. \optdef{*}{}{Period at very end}{of the listed reference}
  647. \optdef{x}{fin-bare}{No period at end}{}
  648. \getans
  649. %    \end{macrocode}
  650. % \subsection*{Abbreviations}
  651. % A number of words may be abbreviated: pages, editors, volume, chapter,
  652. % and so on. The first two may be independently set to abbreviation, the
  653. % rest with a single option.
  654. %    \begin{macrocode}
  655. \mes{^^JABBREVIATE WORD `PAGES':}
  656. \optdef{*}{}{`Page(s)'}{(no abbreviation)}
  657. \optdef{a}{pp}{`Page' abbreviated}{as p. or pp.}
  658. \getans
  659. \mes{^^JABBREVIATE WORD `EDITORS':}
  660. \optdef{*}{}{`Editor(s)'}{(no abbreviation)}
  661. \optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.}
  662. \getans
  663. \mes{^^JOTHER ABBREVIATIONS:}
  664. \optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc}
  665. \optdef{a}{abr}{Abbreviations}{of such words}
  666. \getans
  667. %    \end{macrocode}
  668. % \subsection*{Citation label}
  669. % This applies to author-year style only. The label is the text written
  670. % by the |\cite| command, and for author-year style, this is something like
  671. % `Daly et al.\ (1990b)'. One may select italics for the authors and for the
  672. % extra label attached to the year. The year always remains plain.
  673. % It is not possible to select the type of brackets for the year, since
  674. % this is determined by the \LaTeX{} style option that manages the
  675. % author-year citations. This is not standard \LaTeX, so that there are a
  676. % number of private style files for achieving this.
  677. %    \begin{macrocode}
  678. \ifnumerical\else
  679. \mes{^^JFONT OF CITATION LABEL:}
  680. \optdef{*}{}{Cited authors plain}{as result of \string\cite\space command}
  681. \optdef{i}{lab-it}{Cited authors italic}{}
  682. \getans
  683. \mes{^^JFONT OF EXTRA LABEL:^^J(The extra letter on the year)}
  684. \optdef{*}{}{Extra label plain}{}
  685. \optdef{i}{xlab-it}{Extra label italic}{}
  686. \getans
  687. %    \end{macrocode}
  688. % \subsection*{Variations on `and'}
  689. % It is possible to replace the word `and' with an ampersand \&, and to
  690. % specify whether a comma is to precede `and' in a list of more than two
  691. % names.
  692. %    \begin{macrocode}
  693. \mes{^^JAMPERSAND:}
  694. \optdef{*}{}{Use word `and'}{in author lists}
  695. \optdef{a}{amper}{Use ampersand}{in place of `and'}
  696. \getans
  697. \mes{^^JCOMMA BEFORE `AND':}
  698. \optdef{*}{}{Comma before `and'}{as `Tom, Dick, and Harry'}
  699. \optdef{n}{and-xcom}{No comma before `and'}{as `Tom, Dick and Harry'}
  700. \optdef{c}{and-com}{Comma with 2 authors}{as `Tom, and Harry'}
  701. \optdef{x}{and-x}{No `and'}{as `Tom, Dick, Harry'}
  702. \getans
  703. %    \end{macrocode}
  704. % \subsection*{Font of `et al'}
  705. % One can chose that `et al.'\ be put into italics.
  706. %    \begin{macrocode}
  707. \mes{^^JFONT OF `ET AL':}
  708. \optdef{*}{}{Plain et al}{}
  709. \optdef{i}{etal-it}{Italic et al}{}
  710. \getans
  711. %    \end{macrocode}
  712. % \subsection*{Define emphasis}
  713. % In everything that been mentioned so far, italicization should be
  714. % understood to mean `emphasize' in the \LaTeX{} sense. This means that the
  715. % command |\em| is used. This is not the same as |\it|, which is always
  716. % italics. Rather, with |\em|, the font style switches between |\rm| and
  717. % |\it| depending on the context. Here one may choose to true italics, or
  718. % to switch off italics altogether.
  719. %    \begin{macrocode}
  720. \mes{^^JEMPHASIS:^^J(affects all so-called italics)}
  721. \optdef{*}{}{Use emphasis}{ie, \string\em, allows font switching}
  722. \optdef{i}{em-it}{Use true italics}{ie, \string\it, absolute italics}
  723. \optdef{x}{em-x}{No italics}{at all}
  724. \getans
  725. \endoptions
  726. %</options>
  727. %    \end{macrocode}
  728. % \StopEventually{\relax
  729. %    \DeleteShortVerb{\|}
  730. %    \end{document}}
  731. % \section{The Bibliographic Coding}
  732. %    \begin{macrocode}
  733. %<*!options>
  734. %%---------------------------------------------------------------------
  735. %<*ay>
  736.  % This is an author-year citation style bibliography. As such, it is 
  737.  % non-standard LaTeX, and requires a style option to function properly.
  738. %<*alk>
  739.  % An appropriate style option is:   apalike.sty    by Oren Patashnik
  740.  % The form of the \bibitem entries is
  741.  %   \bibitem[Jones et al., 1990]{key}...
  742.  % The \cite command functions as in standard LaTeX
  743.  %   \cite{key} ==>> (Jones et al., 1990)
  744.  %   \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
  745.  % There is no way to generate textual citations.
  746. %</alk>
  747. %<*!(har|ast|alk|cay|cn)>
  748.  % An appropriate style option is:   natbib.sty    by Patrick W. Daly
  749.  % The form of the \bibitem entries is
  750.  %   \bibitem[Jones et al.(1990)]{key}...
  751.  % The essential feature is that the label (the part in brackets) consists
  752.  % of the author names, as they should appear in the citation, with the year
  753.  % in parentheses following. There must be no space before the opening
  754.  % parenthesis!
  755.  % In natbib.sty, it is possible to define the type of enclosures that is
  756.  % really wanted (brackets or parentheses), but in either case, there must
  757.  % be parentheses in the label.
  758.  % The \cite command functions as follows:
  759.  %   \cite{key} ==>>                Jones et al. (1990)
  760.  %   \cite[]{key} ==>>              (Jones et al., 1990)
  761.  %   \cite[chap. 2]{key} ==>>       (Jones et al., 1990, chap. 2)
  762. %</!(har|ast|alk|cay|cn)>
  763. %<*har>
  764.  % The appropriate style file is:   harvard.sty
  765.  % The form of the bibitem entries is
  766.  %   \harvarditem[Jones et al.]{Jones, Baker, and Smith}{1990}{key}...
  767.  % There are style changes that may be specified in the text with
  768.  % the command \citationstyle.
  769.  %   \citeasnoun{key} ==>>    Jones et al. (1990)
  770.  %   \cite{key} ==>>          (Jones et al. 1990)
  771.  %   \cite[chap. 2]{key} ==>> (Jones et al. 1990, chap. 2)
  772.  % On the first citation of any work, the full author list is used.
  773. %</har>
  774. %<*cay>
  775.  % The appropriate style file is:   chicago.sty
  776.  % The form of the bibitem entries is
  777.  %   \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith}
  778.  %        {Jones et al.}{1990}{key}...
  779.  % The available citation commands are
  780.  %    \cite{key} ==>>     (Jones, Baker, and Smith 1990)
  781.  %    \citeA{key} ==>>    (Jones, Baker, and Smith)
  782.  %    \citeNP{key} ==>>   Jones, Baker, and Smith 1990
  783.  %    \citeANP{key} ==>>  Jones, Baker, and Smith
  784.  %    \citeN{key} ==>>    Jones, Baker, and Smith (1990)
  785.  %    \shortcite  ==>>    (Jones et al. 1990)
  786.  %      etc
  787.  %    \citeyear ==>>      (1990)
  788.  %    \citeyearNP ==>>    1990
  789.  %    Optional notes may be added where meaningful.
  790. %</cay>
  791. %<*ast>
  792.  % The appropriate style file is:   astron.sty
  793.  % The form of the bibitem entries is
  794.  %   \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}...
  795.  % Usage of \cite is as follows:
  796.  %   \cite{key} ==>>          (Jones et al., 1990)
  797.  %   \cite[chap. 2]{key} ==>> (Jones et al. 1990, chap. 2)
  798.  %   \cite*{key} ==>>         (1990)
  799. %</ast>
  800. %<*cn>
  801.  % An appropriate style file is:   authordate1-4.sty
  802.  % The form of the bibitem entries is
  803.  %   \bibitem[\protect\citename{Jones et al.}1990]{key}...
  804.  % Usage of \cite is as follows:
  805.  %   \cite{key} ==>>          (Jones et al., 1990)
  806.  %   \cite[chap. 2]{key} ==>> (Jones et al. 1990, chap. 2)
  807.  %   \shortcite{key} ==>>     (1990)
  808. %</cn>
  809. %</ay>
  810. %<*!ay>
  811.  % This is a numerical citation style, and as such is standard LaTeX.
  812.  % It requires no extra style option to interface to the main text.
  813.  % The form of the \bibitem entries is 
  814.  %   \bibitem{key}...
  815.  % Usage of \cite is as follows:
  816.  %   \cite{key} ==>>          [#]
  817.  %   \cite[chap. 2]{key} ==>> [#, chap. 2]
  818.  % where # is a number determined by the ordering in the reference list.
  819. %<*seq-no> 
  820.  % This is the order in which the works were originally cited in the text.
  821. %</seq-no> 
  822. %<*!seq-no> 
  823.  % This is alphabetical by authors.
  824. %</!seq-no> 
  825. %</!ay>
  826. %<*!ay&cite>
  827.  % This is a special pseudo-numerical bibliography style. The form of 
  828.  % the \bibitem entries is
  829.  %   \bibitem[key]{key}...
  830.  % It is intended to be used to list all the entries in a bib database
  831. %</!ay&cite>
  832. %%---------------------------------------------------------------------
  833. ENTRY
  834.   { address
  835.     author
  836.     booktitle
  837.     chapter
  838.     edition
  839.     editor
  840.     howpublished
  841.     institution
  842.     journal
  843.     key
  844.     month
  845.     note
  846.     number
  847.     organization
  848.     pages
  849.     publisher
  850.     school
  851.     series
  852.     title
  853.     type
  854.     volume
  855.     year
  856. %<!ay>  { label }
  857. %<ay&!(har|cay)>  { label extra.label sort.label }
  858. %<ay&(har|cay)>  { label extra.label sort.label long.label }
  859. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  860. FUNCTION {init.state.consts}
  861. { #0 'before.all :=
  862.   #1 'mid.sentence :=
  863.   #2 'after.sentence :=
  864.   #3 'after.block :=
  865. STRINGS { s t }
  866. FUNCTION {output.nonnull}
  867. { 's :=
  868.   output.state mid.sentence =
  869.     { ", " * write$ }
  870.     { output.state after.block =
  871.         { add.period$ write$
  872.           newline$
  873.           "\newblock " write$
  874.         }
  875.         { output.state before.all =
  876.             'write$
  877.             { add.period$ " " * write$ }
  878.           if$
  879.         }
  880.       if$
  881.       mid.sentence 'output.state :=
  882.     }
  883.   if$
  884. FUNCTION {output}
  885. { duplicate$ empty$
  886.     'pop$
  887.     'output.nonnull
  888.   if$
  889. FUNCTION {output.check}
  890. { 't :=
  891.   duplicate$ empty$
  892.     { pop$ "empty " t * " in " * cite$ * warning$ }
  893.     'output.nonnull
  894.   if$
  895. %    \end{macrocode}
  896. %\changes{1.1}{1993 Nov 12}{Test for missing year, set to ????}
  897. %    \begin{macrocode}
  898. FUNCTION {output.bibitem}
  899. { newline$
  900. %<*ay>
  901. %<!har>  "\bibitem[" write$
  902. %<har>  "\harvarditem[" write$
  903. %<ast>  "\protect\astroncite{" write$
  904. %<cay>  "\protect\citeauthoryear{" long.label * "}{" * write$
  905. %<cn>  "\protect\citename{" write$
  906.   label write$
  907. %<har>  "]{" long.label * "}{" * write$
  908. %<har>  year duplicate$ empty$
  909. %<cn>  ", }" year duplicate$ empty$
  910. %<cay|ast>  "}{" year duplicate$ empty$
  911. %<har|cn|cay|ast>    { pop$ "????" }
  912. %<har|cn|cay|ast>    'skip$
  913. %<har|cn|cay|ast>  if$
  914. %<har>  extra.label * "}{" * write$
  915. %<cn>  * extra.label * "]{" * write$
  916. %<cay|ast>  * extra.label * "}]{" * write$
  917. %<alk>  "]{" write$
  918. %<!(har|cay|ast|alk|cn)>  ")]{" write$
  919. %</ay>
  920. %<!ay&!cite>  "\bibitem{" write$
  921. %<!ay&cite>  "\bibitem[" label * "]{" * write$
  922.   cite$ write$
  923.   "}" write$
  924.   newline$
  925.   before.all 'output.state :=
  926. FUNCTION {fin.entry}
  927. %<*!fin-bare>
  928. { add.period$
  929.   write$
  930. %</!fin-bare>
  931. %<*fin-bare>
  932. { duplicate$ empty$   
  933.     'pop$
  934.     'write$
  935.   if$
  936. %</fin-bare>
  937.   newline$
  938. FUNCTION {new.block}
  939. { output.state before.all =
  940.     'skip$
  941.     { after.block 'output.state := }
  942.   if$
  943. FUNCTION {new.sentence}
  944. { output.state after.block =
  945.     'skip$
  946.     { output.state before.all =
  947.         'skip$
  948.         { after.sentence 'output.state := }
  949.       if$
  950.     }
  951.   if$
  952. FUNCTION {not}
  953. {   { #0 }
  954.     { #1 }
  955.   if$
  956. FUNCTION {and}
  957. {   'skip$
  958.     { pop$ #0 }
  959.   if$
  960. FUNCTION {or}
  961. {   { pop$ #1 }
  962.     'skip$
  963.   if$
  964. %<*!ay>
  965. FUNCTION {new.block.checka}
  966. { empty$
  967.     'skip$
  968.     'new.block
  969.   if$
  970. %</!ay>
  971. FUNCTION {new.block.checkb}
  972. { empty$
  973.   swap$ empty$
  974.   and
  975.     'skip$
  976.     'new.block
  977.   if$
  978. %<*!ay>
  979. FUNCTION {new.sentence.checka}
  980. { empty$
  981.     'skip$
  982.     'new.sentence
  983.   if$
  984. FUNCTION {new.sentence.checkb}
  985. { empty$
  986.   swap$ empty$
  987.   and
  988.     'skip$
  989.     'new.sentence
  990.   if$
  991. %</!ay>
  992. FUNCTION {field.or.null}
  993. { duplicate$ empty$
  994.     { pop$ "" }
  995.     'skip$
  996.   if$
  997. FUNCTION {emphasize}
  998. %<*!em-x>
  999. { duplicate$ empty$
  1000.     { pop$ "" }
  1001. %<!em-it>    { "{\em " swap$ * "}" * }
  1002. %<em-it>    { "{\it " swap$ * "}" * }
  1003.   if$
  1004. %</!em-x>
  1005. %<em-x>{ skip$ }
  1006. %<*nmft-bf|vol-bf|vol-2bf>
  1007. FUNCTION {bolden}
  1008. { duplicate$ empty$
  1009.     { pop$ "" }
  1010.     { "{\bf " swap$ * "}" * }
  1011.   if$
  1012. %</nmft-bf|vol-bf|vol-2bf>
  1013. INTEGERS { nameptr namesleft numnames }
  1014. FUNCTION {format.names}
  1015. { 's :=
  1016.   #1 'nameptr :=
  1017.   s num.names$ 'numnames :=
  1018.   numnames 'namesleft :=
  1019.     { namesleft #0 > }
  1020. %<*!nm-rev1>
  1021.     { s nameptr 
  1022. %<!nm-init&!nm-rev&!nm-rv>      "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
  1023. %<nm-init>      "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  1024. %<!nm-init&nm-rev>      "{vv~}{ll}{, jj}{, f.}" format.name$ 't := 
  1025. %<!nm-init&!nm-rev&nm-rv>      "{vv~}{ll}{ jj}{ f{~}}" format.name$ 't := 
  1026. %</!nm-rev1>
  1027. %<*nm-rev1>
  1028.     { nameptr #1 >
  1029.         { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := }
  1030.         { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := }
  1031.       if$
  1032. %</nm-rev1>
  1033.       nameptr #1 >
  1034.         { 
  1035. %<*nmlm>
  1036. %<m1>          nameptr #2 =
  1037. %<m2>          nameptr #3 =
  1038. %<m3>          nameptr #4 =
  1039. %<m4>          nameptr #5 =
  1040. %<m5>          nameptr #6 =
  1041. %<x1>          numnames #1 > and
  1042. %<x2>          numnames #2 > and
  1043. %<x3>          numnames #3 > and
  1044. %<x4>          numnames #4 > and
  1045. %<x5>          numnames #5 > and
  1046. %<x6>          numnames #6 > and
  1047. %<x7>          numnames #7 > and
  1048. %<x8>          numnames #8 > and
  1049. %<x9>          numnames #9 > and
  1050.             { "others" 't :=
  1051.               #1 'namesleft := }
  1052.             'skip$
  1053.           if$
  1054. %</nmlm>
  1055.           namesleft #1 >
  1056.             { ", " * t * }
  1057.             {
  1058. %<and-com|and-x>              "," *
  1059. %<*!and-xcom&!and-com&!and-x>
  1060.               numnames #2 >
  1061.                 { "," * }
  1062.                 'skip$
  1063.               if$
  1064. %</!and-xcom&!and-com&!and-x>
  1065.               t "others" =
  1066. %<!etal-it>                { " et~al." * }
  1067. %<etal-it>                { " " * "et~al." emphasize * }
  1068. %<!amper&!and-x>                { " and " * t * }
  1069. %<amper&!and-x>                { " \& " * t * }
  1070. %<and-x&!and-com>                { " " * t * }
  1071.               if$
  1072.             }
  1073.           if$
  1074.         }
  1075.         't
  1076.       if$
  1077.       nameptr #1 + 'nameptr :=
  1078.       namesleft #1 - 'namesleft :=
  1079.     }
  1080.   while$
  1081. FUNCTION {format.names.ed}
  1082. { 's :=
  1083.   #1 'nameptr :=
  1084.   s num.names$ 'numnames :=
  1085.   numnames 'namesleft :=
  1086.     { namesleft #0 > }
  1087.     { s nameptr 
  1088. %<!nm-init&!nm-rev&!nm-rev1&!nm-rv>      "{ff~}{vv~}{ll}{, jj}" 
  1089. %<nm-init|nm-rev|nm-rev1>      "{f.~}{vv~}{ll}{, jj}" 
  1090. %<!nm-init&!nm-rev&!nm-rev1&nm-rv>      "{f{~}~}{vv~}{ll}{ jj}" 
  1091.       format.name$ 't := 
  1092.       nameptr #1 >
  1093.         { 
  1094.           namesleft #1 >
  1095.             { ", " * t * }
  1096.             {
  1097. %<and-com|and-x>              "," *
  1098. %<*!and-xcom&!and-com&!and-x>
  1099.               numnames #2 >
  1100.                 { "," * }
  1101.                 'skip$
  1102.               if$
  1103. %</!and-xcom&!and-com&!and-x>
  1104.               t "others" =
  1105. %<!etal-it>                { " et~al." * }
  1106. %<etal-it>                { " " * "et~al." emphasize * }
  1107. %<!amper&!and-x>                { " and " * t * }
  1108. %<amper&!and-x>                { " \& " * t * }
  1109. %<and-x&!and-com>                { " " * t * }
  1110.               if$
  1111.             }
  1112.           if$
  1113.         }
  1114.         't
  1115.       if$
  1116.       nameptr #1 + 'nameptr :=
  1117.       namesleft #1 - 'namesleft :=
  1118.     }
  1119.   while$
  1120. %<*ay>
  1121. FUNCTION {format.key}                   
  1122. { empty$
  1123.     { key field.or.null }
  1124.     { "" }
  1125.   if$
  1126. %</ay>
  1127. FUNCTION {format.authors}
  1128. { author empty$
  1129.     { "" }
  1130. %<!nmft-sc&!nmft-bf&!nmft-it>    { author format.names }
  1131. %<nmft-sc>    { "{\sc " author format.names * "}" * }
  1132. %<!nmft-sc&nmft-bf>    { author format.names bolden }
  1133. %<!nmft-sc&!nmft-bf&nmft-it>    { author format.names emphasize }
  1134.   if$
  1135. FUNCTION {format.editors}
  1136. { editor empty$
  1137.     { "" }
  1138. %<!nmft-sc&!nmft-bf&!nmft-it>    { editor format.names 
  1139. %<nmft-sc>    { "{\sc " editor format.names * "}" * 
  1140. %<!nmft-sc&nmft-bf>    { editor format.names bolden 
  1141. %<!nmft-sc&!nmft-bf&nmft-it>    { editor format.names emphasize 
  1142.       editor num.names$ #1 >
  1143. %<!ed>        { ", editors" * }
  1144. %<!ed>        { ", editor" * }
  1145. %<ed>        { " (eds.)" * }
  1146. %<ed>        { " (ed.)" * }
  1147.       if$
  1148.     }
  1149.   if$
  1150. FUNCTION {format.in.editors}
  1151. { editor empty$
  1152.     { "" }
  1153.     { editor format.names.ed
  1154. %<*!edby>
  1155.       editor num.names$ #1 >
  1156. %<!ed>        { ", editors" * }
  1157. %<!ed>        { ", editor" * }
  1158. %<ed>        { " (eds.)" * }
  1159. %<ed>        { " (ed.)" * }
  1160.       if$
  1161. %</!edby>
  1162.     }
  1163.   if$
  1164. FUNCTION {format.title}
  1165. { title empty$
  1166.     { "" }
  1167. %<!atit-u>    { title "t" change.case$ 
  1168. %<atit-u>    { title 
  1169. %<tit-it>      emphasize
  1170. %<!tit-it&tit-q>      "`" swap$ * "'" *
  1171. %<!tit-it&!tit-q&tit-qq>      "``" swap$ * "''" *
  1172.     }
  1173.   if$
  1174. FUNCTION {n.dashify}
  1175. { 't :=
  1176.     { t empty$ not }
  1177.     { t #1 #1 substring$ "-" =
  1178.         { t #1 #2 substring$ "--" = not
  1179.             { "--" *
  1180.               t #2 global.max$ substring$ 't :=
  1181.             }
  1182.             {   { t #1 #1 substring$ "-" = }
  1183.                 { "-" *
  1184.                   t #2 global.max$ substring$ 't :=
  1185.                 }
  1186.               while$
  1187.             }
  1188.           if$
  1189.         }
  1190.         { t #1 #1 substring$ *
  1191.           t #2 global.max$ substring$ 't :=
  1192.         }
  1193.       if$
  1194.     }
  1195.   while$
  1196. FUNCTION {word.in}
  1197. %<blk-com&in-col>{ "in: " }
  1198. %<blk-com&!in-col>{ "in " }
  1199. %<!blk-com&in-col>{ "In: " }
  1200. %<!blk-com&!in-col>{ "In " }
  1201. %<*ay>
  1202. FUNCTION {format.date}
  1203. { year duplicate$ empty$
  1204.     { "empty year in " cite$ * "; set to ????" * warning$ 
  1205.        pop$ "????" }
  1206.     'skip$
  1207.   if$
  1208. %<yr-par|yr-brk|yr-col>  before.all 'output.state :=
  1209. %<yr-par>  " (" swap$ * extra.label * ")" *
  1210. %<!yr-par&yr-brk>  " [" swap$ * extra.label * "]" *
  1211. %<!yr-par&!yr-brk&yr-col>  ": " swap$ * extra.label *
  1212. %<!yr-par&!yr-brk&!yr-col>  extra.label *
  1213. %</ay>
  1214. %<*!ay>
  1215. FUNCTION {format.date}
  1216. { year empty$
  1217.     { month empty$
  1218.         { "" }
  1219.         { "there's a month but no year in " cite$ * warning$
  1220.           month
  1221.         }
  1222.       if$
  1223.     }
  1224.     {
  1225. %<yr-par|yr-brk|yr-col>      before.all 'output.state :=
  1226. %<yr-par>      " (" year * ")" *
  1227. %<!yr-par&yr-brk>      " [" year * "]" *
  1228. %<!yr-par&!yr-brk&yr-col>      ": " year *
  1229. %<*!yr-par&!yr-brk&!yr-col>
  1230.       month empty$
  1231.         'year
  1232.         { month " " * year * }
  1233.       if$
  1234. %</!yr-par&!yr-brk&!yr-col>
  1235.     }
  1236.   if$
  1237. %</!ay>
  1238. FUNCTION {format.btitle}
  1239. %<!btit-rm>{ title emphasize
  1240. %<btit-rm>{ title 
  1241. FUNCTION {tie.or.space.connect}
  1242. { duplicate$ text.length$ #3 <
  1243.     { "~" }
  1244.     { " " }
  1245.   if$
  1246.   swap$ * *
  1247. FUNCTION {either.or.check}
  1248. { empty$
  1249.     'pop$
  1250.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  1251.   if$
  1252. FUNCTION {format.bvolume}
  1253. { volume empty$
  1254.     { "" }
  1255. %<!abr>    { "volume" volume tie.or.space.connect
  1256. %<abr>    { "vol." volume tie.or.space.connect
  1257.       series empty$
  1258.         'skip$
  1259.         { " of " * series emphasize * }
  1260.       if$
  1261.       "volume and number" number either.or.check
  1262.     }
  1263.   if$
  1264. FUNCTION {format.number.series}
  1265. { volume empty$
  1266.     { number empty$
  1267.         { series field.or.null }
  1268.         { output.state mid.sentence =
  1269. %<!abr>            { "number" }
  1270. %<!abr>            { "Number" }
  1271. %<abr>            { "no." }
  1272. %<abr>            { "No." }
  1273.           if$
  1274.           number tie.or.space.connect
  1275.           series empty$
  1276.             { "there's a number but no series in " cite$ * warning$ }
  1277.             { " in " * series * }
  1278.           if$
  1279.         }
  1280.       if$
  1281.     }
  1282.     { "" }
  1283.   if$
  1284. FUNCTION {format.edition}
  1285. { edition empty$
  1286.     { "" }
  1287.     { output.state mid.sentence =
  1288. %<!abr>        { edition "l" change.case$ " edition" * }
  1289. %<!abr>        { edition "t" change.case$ " edition" * }
  1290. %<abr>        { edition "l" change.case$ " edn." * }
  1291. %<abr>        { edition "t" change.case$ " edn." * }
  1292.       if$
  1293.     }
  1294.   if$
  1295. INTEGERS { multiresult }
  1296. FUNCTION {multi.page.check}
  1297. { 't :=
  1298.   #0 'multiresult :=
  1299.     { multiresult not
  1300.       t empty$ not
  1301.       and
  1302.     }
  1303.     { t #1 #1 substring$
  1304.       duplicate$ "-" =
  1305.       swap$ duplicate$ "," =
  1306.       swap$ "+" =
  1307.       or or
  1308.         { #1 'multiresult := }
  1309.         { t #2 global.max$ substring$ 't := }
  1310.       if$
  1311.     }
  1312.   while$
  1313.   multiresult
  1314. FUNCTION {format.pages}
  1315. { pages empty$
  1316.     { "" }
  1317.     { pages multi.page.check
  1318. %<!pp>        { "pages" pages n.dashify tie.or.space.connect }
  1319. %<!pp>        { "page" pages tie.or.space.connect }
  1320. %<pp>        { "pp." pages n.dashify tie.or.space.connect }
  1321. %<pp>        { "p." pages tie.or.space.connect }
  1322.       if$
  1323.     }
  1324.   if$
  1325. %<*jpg-1|pg-1>
  1326. FUNCTION {first.page}
  1327. { 't :=
  1328.     {  t empty$ not t #1 #1 substring$ "-" = not and }
  1329.     { t #1 #1 substring$ *
  1330.       t #2 global.max$ substring$ 't :=
  1331.     }
  1332.   while$
  1333. %</jpg-1|pg-1>
  1334. FUNCTION {format.vol.num.pages}
  1335. { volume field.or.null
  1336. %<vol-bf&!vol-2bf>  bolden
  1337. %<!vol-bf&!vol-2bf&vol-it>  emphasize
  1338.   number empty$
  1339.     'skip$
  1340.     { "(" number * ")" * *
  1341. %<!vol-bf&vol-2bf>      bolden
  1342.       volume empty$
  1343.         { "there's a number but no volume in " cite$ * warning$ }
  1344.         'skip$
  1345.       if$
  1346.     }
  1347.   if$
  1348.   pages empty$
  1349.     'skip$
  1350.     { duplicate$ empty$
  1351.         { pop$ format.pages }
  1352. %<!volp-com&!jpg-1>        { ":" * pages n.dashify * }
  1353. %<volp-com&!jpg-1>        { ", " * pages n.dashify * }
  1354. %<!volp-com&jpg-1>        { ":" * pages first.page * }
  1355. %<volp-com&jpg-1>        { ", " * pages first.page * }
  1356.       if$
  1357.     }
  1358.   if$
  1359. FUNCTION {format.chapter.pages}
  1360. { chapter empty$
  1361.     'format.pages
  1362.     { type empty$
  1363. %<!abr>        { "chapter" }
  1364. %<abr>        { "chap." }
  1365.         { type "l" change.case$ }
  1366.       if$
  1367.       chapter tie.or.space.connect
  1368.       pages empty$
  1369.         'skip$
  1370.         { ", " * format.pages * }
  1371.       if$
  1372.     }
  1373.   if$
  1374. FUNCTION {format.in.ed.booktitle}
  1375. { booktitle empty$
  1376.     { "" }
  1377.     { editor empty$
  1378.         { word.in booktitle emphasize * }
  1379. %<!edby>        { word.in format.in.editors * ", " * booktitle emphasize * }
  1380. %<edby>        { word.in booktitle emphasize * ", edited by " * 
  1381. %<edby>          format.in.editors * }
  1382.       if$
  1383.     }
  1384.   if$
  1385. %<*!ay>
  1386. FUNCTION {empty.misc.check}
  1387. { author empty$ title empty$ howpublished empty$
  1388.   month empty$ year empty$ note empty$
  1389.   and and and and and
  1390.   key empty$ not and
  1391.     { "all relevant fields are empty in " cite$ * warning$ }
  1392.     'skip$
  1393.   if$
  1394. %</!ay>
  1395. FUNCTION {format.thesis.type}
  1396. { type empty$
  1397.     'skip$
  1398.     { pop$
  1399.       type "t" change.case$
  1400.     }
  1401.   if$
  1402. FUNCTION {format.tr.number}
  1403. { type empty$
  1404. %<!abr>    { "Technical Report" }
  1405. %<abr>    { "Tech. Rep." }
  1406.     'type
  1407.   if$
  1408.   number empty$
  1409.     { "t" change.case$ }
  1410.     { number tie.or.space.connect }
  1411.   if$
  1412. FUNCTION {format.article.crossref}
  1413. %<*!ay>
  1414.   key empty$
  1415.     { journal empty$
  1416.         { "need key or journal for " cite$ * " to crossref " * crossref *
  1417.           warning$
  1418.           ""
  1419.         }
  1420.         { word.in "{\em " * journal * "\/} " * }
  1421.       if$
  1422.     }
  1423.     { word.in key * " " *}
  1424.   if$
  1425. %</!ay>
  1426. %<ay>  word.in
  1427.   "\cite{" * crossref * "}" *
  1428. %<*!ay>
  1429. FUNCTION {format.crossref.editor}
  1430. { editor #1 "{vv~}{ll}" format.name$
  1431.   editor num.names$ duplicate$
  1432.   #2 >
  1433. %<!etal-it>    { pop$ " et~al." * }
  1434. %<etal-it>    { pop$ " " * "et~al." emphasize * }
  1435.     { #2 <
  1436.         'skip$
  1437.         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  1438. %<!etal-it>            { " et~al." * }
  1439. %<etal-it>            { " " * "et~al." emphasize * }
  1440. %<!amper>            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  1441. %<amper>            { " \& " * editor #2 "{vv~}{ll}" format.name$ * }
  1442.           if$
  1443.         }
  1444.       if$
  1445.     }
  1446.   if$
  1447. %</!ay>
  1448. FUNCTION {format.book.crossref}
  1449. { volume empty$
  1450.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  1451.       word.in
  1452.     }
  1453. %<!abr&!(blk-com|blk-tit)>    { "Volume" volume tie.or.space.connect
  1454. %<abr&!(blk-com|blk-tit)>    { "Vol." volume tie.or.space.connect
  1455. %<!abr&(blk-com|blk-tit)>    { "volume" volume tie.or.space.connect
  1456. %<abr&(blk-com|blk-tit)>    { "vol." volume tie.or.space.connect
  1457.       " of " *
  1458.     }
  1459.   if$
  1460. %<*!ay>
  1461.   editor empty$
  1462.   editor field.or.null author field.or.null =
  1463.     { key empty$
  1464.         { series empty$
  1465.             { "need editor, key, or series for " cite$ * " to crossref " *
  1466.               crossref * warning$
  1467.               "" *
  1468.             }
  1469.             { "{\em " * series * "\/}" * }
  1470.           if$
  1471.         }
  1472.         { key * }
  1473.       if$
  1474.     }
  1475.     { format.crossref.editor * }
  1476.   if$
  1477. %</!ay>
  1478.   "\cite{" * crossref * "}" *
  1479. FUNCTION {format.incoll.inproc.crossref}
  1480. %<*!ay>
  1481.   editor empty$
  1482.   editor field.or.null author field.or.null =
  1483.     { key empty$
  1484.         { booktitle empty$
  1485.             { "need editor, key, or booktitle for " cite$ * " to crossref " *
  1486.               crossref * warning$
  1487.               ""
  1488.             }
  1489.             { word.in "{\em " * booktitle * "\/} " * }
  1490.           if$
  1491.         }
  1492.         { word.in key * " " *}
  1493.       if$
  1494.     }
  1495.     { word.in format.crossref.editor * " " *}
  1496.   if$
  1497. %</!ay>
  1498. %<ay>  word.in
  1499.   "\cite{" * crossref * "}" *
  1500. FUNCTION {article}
  1501. { output.bibitem
  1502.   format.authors "author" output.check
  1503. %<ay>  author format.key output
  1504. %<dt-beg>  format.date "year" output.check
  1505. %<!blk-com&!blk-tit>  new.block
  1506. %<!jtit-x>  format.title "title" output.check
  1507. %<!blk-com&!blk-tit>  new.block
  1508. %<blk-tit>  new.sentence
  1509.   crossref missing$
  1510.     { journal emphasize "journal" output.check
  1511. %<jnm-x>      " " * before.all 'output.state :=
  1512.       format.vol.num.pages output
  1513. %<!dt-beg&!dt-end>      format.date "year" output.check
  1514.     }
  1515.     { format.article.crossref output.nonnull
  1516.       format.pages output
  1517.     }
  1518.   if$
  1519. %<!blk-com&!blk-tit>  new.block
  1520.   note output
  1521. %<*!dt-beg&dt-end>
  1522. %<!blk-com&!blk-tit>  new.block 
  1523.   format.date "year" output.check
  1524. %</!dt-beg&dt-end>
  1525.   fin.entry
  1526. FUNCTION {book}
  1527. { output.bibitem
  1528.   author empty$
  1529.     { format.editors "author and editor" output.check
  1530. %<ay>      editor format.key output
  1531.     }
  1532.     { format.authors output.nonnull
  1533.       crossref missing$
  1534.         { "author and editor" editor either.or.check }
  1535.         'skip$
  1536.       if$
  1537.     }
  1538.   if$
  1539. %<dt-beg>  format.date "year" output.check
  1540. %<!blk-com&!blk-tit>  new.block
  1541.   format.btitle "title" output.check
  1542.   crossref missing$
  1543.     { format.bvolume output
  1544. %<!blk-com&!blk-tit>      new.block
  1545. %<blk-tit>  new.sentence
  1546.       format.number.series output
  1547.       new.sentence
  1548.       publisher "publisher" output.check
  1549.       address output
  1550.     }
  1551.     {
  1552. %<!blk-com&!blk-tit>      new.block
  1553. %<blk-tit>  new.sentence
  1554.       format.book.crossref output.nonnull
  1555.     }
  1556.   if$
  1557.   format.edition output
  1558. %<!dt-beg&!dt-end>  format.date "year" output.check
  1559. %<!blk-com&!blk-tit>  new.block
  1560.   note output
  1561. %<*!dt-beg&dt-end>
  1562. %<!blk-com&!blk-tit>  new.block 
  1563.   format.date "year" output.check
  1564. %</!dt-beg&dt-end>
  1565.   fin.entry
  1566. FUNCTION {booklet}
  1567. { output.bibitem
  1568.   format.authors output
  1569. %<ay>  author format.key output
  1570. %<ay&dt-beg>  format.date "year" output.check
  1571. %<!ay&dt-beg>  format.date output
  1572. %<!blk-com&!blk-tit>  new.block
  1573.   format.title "title" output.check
  1574. %<!blk-com&!blk-tit>  new.block
  1575. %<blk-tit>  new.sentence
  1576.   howpublished output
  1577.   address output
  1578. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  1579. %<!ay&!dt-beg&!dt-end>  format.date output
  1580. %<!blk-com&!blk-tit>  new.block
  1581.   note output
  1582. %<*ay&!dt-beg&dt-end>
  1583. %<!blk-com&!blk-tit>  new.block 
  1584.   format.date "year" output.check
  1585. %</ay&!dt-beg&dt-end>
  1586. %<*!ay&!dt-beg&dt-end>
  1587. %<!blk-com&!blk-tit>  new.block 
  1588.   format.date output
  1589. %</!ay&!dt-beg&dt-end>
  1590.   fin.entry
  1591. FUNCTION {inbook}
  1592. { output.bibitem
  1593.   author empty$
  1594.     { format.editors "author and editor" output.check
  1595. %<ay>      editor format.key output
  1596.     }
  1597.     { format.authors output.nonnull
  1598.       crossref missing$
  1599.         { "author and editor" editor either.or.check }
  1600.         'skip$
  1601.       if$
  1602.     }
  1603.   if$
  1604. %<dt-beg>  format.date "year" output.check
  1605. %<!blk-com&!blk-tit>  new.block
  1606.   format.btitle "title" output.check
  1607.   crossref missing$
  1608.     { format.bvolume output
  1609.       format.chapter.pages "chapter and pages" output.check
  1610. %<!blk-com&!blk-tit>      new.block
  1611. %<blk-tit>  new.sentence
  1612.       format.number.series output
  1613.       new.sentence
  1614.       publisher "publisher" output.check
  1615.       address output
  1616.     }
  1617.     { format.chapter.pages "chapter and pages" output.check
  1618. %<!blk-com&!blk-tit>      new.block
  1619. %<blk-tit>  new.sentence
  1620.       format.book.crossref output.nonnull
  1621.     }
  1622.   if$
  1623.   format.edition output
  1624. %<!dt-beg&!dt-end>  format.date "year" output.check
  1625. %<!blk-com&!blk-tit>  new.block
  1626.   note output
  1627. %<*!dt-beg&dt-end>
  1628. %<!blk-com&!blk-tit>  new.block 
  1629.   format.date "year" output.check
  1630. %</!dt-beg&dt-end>
  1631.   fin.entry
  1632. FUNCTION {incollection}
  1633. { output.bibitem
  1634.   format.authors "author" output.check
  1635. %<ay>  author format.key output
  1636. %<dt-beg>  format.date "year" output.check
  1637. %<!blk-com&!blk-tit>  new.block
  1638. %<!jtit-x>  format.title "title" output.check
  1639. %<!blk-com&!blk-tit>  new.block
  1640. %<blk-tit>  new.sentence
  1641.   crossref missing$
  1642.     { format.in.ed.booktitle "booktitle" output.check
  1643.       format.bvolume output
  1644.       format.number.series output
  1645.       format.chapter.pages output
  1646.       new.sentence
  1647.       publisher "publisher" output.check
  1648.       address output
  1649.       format.edition output
  1650. %<!dt-beg&!dt-end>      format.date "year" output.check
  1651.     }
  1652.     { format.incoll.inproc.crossref output.nonnull
  1653.       format.chapter.pages output
  1654.     }
  1655.   if$
  1656. %<!blk-com&!blk-tit>  new.block
  1657.   note output
  1658. %<*!dt-beg&dt-end>
  1659. %<!blk-com&!blk-tit>  new.block 
  1660.   format.date "year" output.check
  1661. %</!dt-beg&dt-end>
  1662.   fin.entry
  1663. FUNCTION {inproceedings}
  1664. { output.bibitem
  1665.   format.authors "author" output.check
  1666. %<ay>  author format.key output
  1667. %<dt-beg>  format.date "year" output.check
  1668. %<!blk-com&!blk-tit>  new.block
  1669. %<!jtit-x>  format.title "title" output.check
  1670. %<!blk-com&!blk-tit>  new.block
  1671. %<blk-tit>  new.sentence
  1672.   crossref missing$
  1673.     { format.in.ed.booktitle "booktitle" output.check
  1674.       format.bvolume output
  1675.       format.number.series output
  1676.       format.pages output
  1677. %<*!ay>
  1678.       address empty$
  1679.         { organization publisher new.sentence.checkb
  1680.           organization output
  1681.           publisher output
  1682.           format.date "year" output.check
  1683.         }
  1684.         { address output.nonnull
  1685. %<!dt-beg&!dt-end>          format.date "year" output.check
  1686.           new.sentence
  1687.           organization output
  1688.           publisher output
  1689.         }
  1690.       if$
  1691. %</!ay>
  1692. %<*ay>
  1693.       address output
  1694.       new.sentence
  1695.       organization output
  1696.       publisher output
  1697. %<!dt-beg&!dt-end>  format.date "year" output.check
  1698. %</ay>
  1699.     }
  1700.     { format.incoll.inproc.crossref output.nonnull
  1701.       format.pages output
  1702.     }
  1703.   if$
  1704. %<!blk-com&!blk-tit>  new.block
  1705.   note output
  1706. %<*!dt-beg&dt-end>
  1707. %<!blk-com&!blk-tit>  new.block 
  1708.   format.date "year" output.check
  1709. %</!dt-beg&dt-end>
  1710.   fin.entry
  1711. FUNCTION {conference} { inproceedings }
  1712. %<*ay>
  1713. FUNCTION {manual}
  1714. { output.bibitem
  1715.   format.authors output
  1716.   author format.key output
  1717. %<dt-beg>  format.date "year" output.check
  1718. %<!blk-com&!blk-tit>  new.block
  1719.   format.btitle "title" output.check
  1720. %<blk-tit>  new.sentence
  1721. %<!blk-com&!blk-tit>  organization address new.block.checkb
  1722.   organization output
  1723.   address output
  1724.   format.edition output
  1725. %<!dt-beg&!dt-end>  format.date "year" output.check
  1726. %<!blk-com&!blk-tit>  new.block
  1727.   note output
  1728. %<*!dt-beg&dt-end>
  1729. %<!blk-com&!blk-tit>  new.block 
  1730.   format.date "year" output.check
  1731. %</!dt-beg&dt-end>
  1732.   fin.entry
  1733. %</ay>
  1734. %<*!ay>
  1735. FUNCTION {manual}
  1736. { output.bibitem
  1737.   author empty$
  1738.     { organization empty$
  1739.         'skip$
  1740.         { organization output.nonnull
  1741.           address output
  1742.         }
  1743.       if$
  1744.     }
  1745.     { format.authors output.nonnull }
  1746.   if$
  1747. %<ay&dt-beg>  format.date "year" output.check
  1748. %<!ay&dt-beg>  format.date output
  1749. %<!blk-com&!blk-tit>  new.block
  1750.   format.btitle "title" output.check
  1751. %<blk-tit>  new.sentence
  1752.   author empty$
  1753.     { organization empty$
  1754.     {
  1755. %<!blk-com&!blk-tit>          address new.block.checka
  1756.           address output
  1757.         }
  1758.         'skip$
  1759.       if$
  1760.     }
  1761.     {
  1762. %<!blk-com&!blk-tit>      organization address new.block.checkb
  1763.       organization output
  1764.       address output
  1765.     }
  1766.   if$
  1767.   format.edition output
  1768. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  1769. %<!ay&!dt-beg&!dt-end>  format.date output
  1770. %<!blk-com&!blk-tit>  new.block
  1771.   note output
  1772. %<*ay&!dt-beg&dt-end>
  1773. %<!blk-com&!blk-tit>  new.block 
  1774.   format.date "year" output.check
  1775. %</ay&!dt-beg&dt-end>
  1776. %<*!ay&!dt-beg&dt-end>
  1777. %<!blk-com&!blk-tit>  new.block 
  1778.   format.date output
  1779. %</!ay&!dt-beg&dt-end>
  1780.   fin.entry
  1781. %</!ay>
  1782. FUNCTION {mastersthesis}
  1783. { output.bibitem
  1784.   format.authors "author" output.check
  1785. %<ay>  author format.key output
  1786. %<dt-beg>  format.date "year" output.check
  1787. %<!blk-com&!blk-tit>  new.block
  1788. %<!thtit-a>  format.btitle "title" output.check
  1789. %<thtit-a>  format.title "title" output.check
  1790. %<!blk-com&!blk-tit>  new.block
  1791. %<blk-tit>  new.sentence
  1792.   "Master's thesis" format.thesis.type output.nonnull
  1793.   school "school" output.check
  1794.   address output
  1795. %<!dt-beg&!dt-end>  format.date "year" output.check
  1796. %<!blk-com&!blk-tit>  new.block
  1797.   note output
  1798. %<*!dt-beg&dt-end>
  1799. %<!blk-com&!blk-tit>  new.block 
  1800.   format.date "year" output.check
  1801. %</!dt-beg&dt-end>
  1802.   fin.entry
  1803. FUNCTION {misc}
  1804. { output.bibitem
  1805.   format.authors output
  1806. %<ay>  author format.key output
  1807. %<ay&dt-beg>  format.date "year" output.check
  1808. %<!ay&dt-beg>  format.date output
  1809. %<*ay>
  1810. %<!blk-com&!blk-tit>  new.block
  1811.   format.title output
  1812. %<!blk-com&!blk-tit>  new.block
  1813. %<blk-tit>  new.sentence
  1814. %</ay>
  1815. %<*!ay>
  1816. %<!blk-com&!blk-tit>  title howpublished new.block.checkb
  1817.   format.title output
  1818. %<blk-tit>  new.sentence
  1819. %<!blk-com&!blk-tit>  howpublished new.block.checka
  1820. %</!ay>
  1821.   howpublished output
  1822. %<ay&!dt-beg&!dt-end>  format.date "year" output.check
  1823. %<!ay&!dt-beg&!dt-end>  format.date output
  1824. %<!blk-com&!blk-tit>  new.block
  1825.   note output
  1826. %<*ay&!dt-beg&dt-end>
  1827. %<!blk-com&!blk-tit>  new.block 
  1828.   format.date "year" output.check
  1829. %</ay&!dt-beg&dt-end>
  1830. %<*!ay&!dt-beg&dt-end>
  1831. %<!blk-com&!blk-tit>  new.block 
  1832.   format.date output
  1833. %</!ay&!dt-beg&dt-end>
  1834.   fin.entry
  1835. FUNCTION {phdthesis}
  1836. { output.bibitem
  1837.   format.authors "author" output.check
  1838. %<ay>  author format.key output
  1839. %<dt-beg>  format.date "year" output.check
  1840. %<!blk-com&!blk-tit>  new.block
  1841. %<!thtit-a>  format.btitle "title" output.check
  1842. %<thtit-a>  format.title "title" output.check
  1843. %<!blk-com&!blk-tit>  new.block
  1844. %<blk-tit>  new.sentence
  1845.   "Ph.D. thesis" format.thesis.type output.nonnull
  1846.   school "school" output.check
  1847.   address output
  1848. %<!dt-beg&!dt-end>  format.date "year" output.check
  1849. %<!blk-com&!blk-tit>  new.block
  1850.   note output
  1851. %<*!dt-beg&dt-end>
  1852. %<!blk-com&!blk-tit>  new.block 
  1853.   format.date "year" output.check
  1854. %</!dt-beg&dt-end>
  1855.   fin.entry
  1856. %<*ay>
  1857. FUNCTION {proceedings}
  1858. { output.bibitem
  1859.   format.editors output
  1860.   editor format.key output
  1861. %<dt-beg>  format.date "year" output.check
  1862. %<!blk-com&!blk-tit>  new.block
  1863.   format.btitle "title" output.check
  1864.   format.bvolume output
  1865.   format.number.series output
  1866.   address output
  1867.   new.sentence
  1868.   organization output
  1869.   publisher output
  1870. %<!dt-beg&!dt-end>  format.date "year" output.check
  1871. %<!blk-com&!blk-tit>  new.block
  1872.   note output
  1873. %<*!dt-beg&dt-end>
  1874. %<!blk-com&!blk-tit>  new.block 
  1875.   format.date "year" output.check
  1876. %</!dt-beg&dt-end>
  1877.   fin.entry
  1878. %</ay>
  1879. %<*!ay>
  1880. FUNCTION {proceedings}
  1881. { output.bibitem
  1882.   editor empty$
  1883.     { organization output }
  1884.     { format.editors output.nonnull }
  1885.   if$
  1886. %<dt-beg>  format.date "year" output.check
  1887. %<!blk-com&!blk-tit>  new.block
  1888.   format.btitle "title" output.check
  1889.   format.bvolume output
  1890.   format.number.series output
  1891.   address empty$
  1892.     { editor empty$
  1893.         { publisher new.sentence.checka }
  1894.         { organization publisher new.sentence.checkb
  1895.           organization output
  1896.         }
  1897.       if$
  1898.       publisher output
  1899. %<!dt-beg&!dt-end>      format.date "year" output.check
  1900.     }
  1901.     { address output.nonnull
  1902. %<!dt-beg&!dt-end>      format.date "year" output.check
  1903.       new.sentence
  1904.       editor empty$
  1905.         'skip$
  1906.         { organization output }
  1907.       if$
  1908.       publisher output
  1909.     }
  1910.   if$
  1911. %<!blk-com&!blk-tit>  new.block
  1912.   note output
  1913. %<*!dt-beg&dt-end>
  1914. %<!blk-com&!blk-tit>  new.block 
  1915.   format.date "year" output.check
  1916. %</!dt-beg&dt-end>
  1917.   fin.entry
  1918. %</!ay>
  1919. FUNCTION {techreport}
  1920. { output.bibitem
  1921.   format.authors "author" output.check
  1922. %<ay>  author format.key output
  1923. %<dt-beg>  format.date "year" output.check
  1924. %<!blk-com&!blk-tit>  new.block
  1925.   format.title "title" output.check
  1926. %<!blk-com&!blk-tit>  new.block
  1927. %<blk-tit>  new.sentence
  1928.   format.tr.number output.nonnull
  1929.   institution "institution" output.check
  1930.   address output
  1931. %<!dt-beg&!dt-end>  format.date "year" output.check
  1932. %<!blk-com&!blk-tit>  new.block
  1933.   note output
  1934. %<*!dt-beg&dt-end>
  1935. %<!blk-com&!blk-tit>  new.block 
  1936.   format.date "year" output.check
  1937. %</!dt-beg&dt-end>
  1938.   fin.entry
  1939. FUNCTION {unpublished}
  1940. { output.bibitem
  1941.   format.authors "author" output.check
  1942. %<ay>  author format.key output
  1943. %<ay&dt-beg>  format.date "year" output.check
  1944. %<!ay&dt-beg>  format.date output
  1945. %<!blk-com&!blk-tit>  new.block
  1946.   format.title "title" output.check
  1947. %<!blk-com&!blk-tit>  new.block
  1948. %<blk-tit>  new.sentence
  1949.   note "note" output.check
  1950. %<*ay&!dt-beg&dt-end>
  1951. %<!blk-com&!blk-tit>  new.block 
  1952.   format.date "year" output.check
  1953. %</ay&!dt-beg&dt-end>
  1954. %<*!ay&!dt-beg&dt-end>
  1955. %<!blk-com&!blk-tit>  new.block 
  1956.   format.date output
  1957. %</!ay&!dt-beg&dt-end>
  1958.   fin.entry
  1959. FUNCTION {default.type} { misc }
  1960. MACRO {jan} {"January"}
  1961. MACRO {feb} {"February"}
  1962. MACRO {mar} {"March"}
  1963. MACRO {apr} {"April"}
  1964. MACRO {may} {"May"}
  1965. MACRO {jun} {"June"}
  1966. MACRO {jul} {"July"}
  1967. MACRO {aug} {"August"}
  1968. MACRO {sep} {"September"}
  1969. MACRO {oct} {"October"}
  1970. MACRO {nov} {"November"}
  1971. MACRO {dec} {"December"}
  1972. MACRO {acmcs} {"ACM Computing Surveys"}
  1973. MACRO {acta} {"Acta Informatica"}
  1974. MACRO {cacm} {"Communications of the ACM"}
  1975. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  1976. MACRO {ibmsj} {"IBM Systems Journal"}
  1977. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  1978. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  1979. MACRO {ieeetcad}
  1980.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  1981. MACRO {ipl} {"Information Processing Letters"}
  1982. MACRO {jacm} {"Journal of the ACM"}
  1983. MACRO {jcss} {"Journal of Computer and System Sciences"}
  1984. MACRO {scp} {"Science of Computer Programming"}
  1985. MACRO {sicomp} {"SIAM Journal on Computing"}
  1986. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  1987. MACRO {tods} {"ACM Transactions on Database Systems"}
  1988. MACRO {tog} {"ACM Transactions on Graphics"}
  1989. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  1990. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  1991. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  1992. MACRO {tcs} {"Theoretical Computer Science"}
  1993. %<*ay|!seq-no>
  1994. FUNCTION {sortify}
  1995. { purify$
  1996.   "l" change.case$
  1997. INTEGERS { len }
  1998. FUNCTION {chop.word}
  1999. { 's :=
  2000.   'len :=
  2001.   s #1 len substring$ =
  2002.     { s len #1 + global.max$ substring$ }
  2003.     's
  2004.   if$
  2005. %<*ay>
  2006. FUNCTION {format.lab.names}
  2007. { 's :=
  2008.   s #1 "{vv~}{ll}" format.name$
  2009.   s num.names$ duplicate$
  2010.   #2 >
  2011. %<!etal-it>    { pop$ " et~al." * }
  2012. %<etal-it>    { pop$ " " * "et~al." emphasize * }
  2013.     { #2 <
  2014.         'skip$
  2015.         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  2016. %<!etal-it>            { " et~al." * }
  2017. %<etal-it>            { " " * "et~al." emphasize * }
  2018. %<!amper>            { " and " * s #2 "{vv~}{ll}" format.name$ * }
  2019. %<amper>            { " \& " * s #2 "{vv~}{ll}" format.name$ * }
  2020.           if$
  2021.         }
  2022.       if$
  2023.     }
  2024.   if$
  2025. %<*har|cay>
  2026. FUNCTION {format.long.lab.names}
  2027. { 's :=
  2028.   #1 'nameptr :=
  2029.   s num.names$ 'numnames :=
  2030.   numnames 'namesleft :=
  2031.     { namesleft #0 > }
  2032.     { s nameptr 
  2033.       "{vv~}{ll}" format.name$ 't :=
  2034.       nameptr #1 >
  2035.         { 
  2036. %<*nmlm>
  2037. %<m1>          nameptr #2 =
  2038. %<m2>          nameptr #3 =
  2039. %<m3>          nameptr #4 =
  2040. %<m4>          nameptr #5 =
  2041. %<m5>          nameptr #6 =
  2042. %<x1>          numnames #1 > and
  2043. %<x2>          numnames #2 > and
  2044. %<x3>          numnames #3 > and
  2045. %<x4>          numnames #4 > and
  2046. %<x5>          numnames #5 > and
  2047. %<x6>          numnames #6 > and
  2048. %<x7>          numnames #7 > and
  2049. %<x8>          numnames #8 > and
  2050. %<x9>          numnames #9 > and
  2051.             { "others" 't :=
  2052.               #1 'namesleft := }
  2053.             'skip$
  2054.           if$
  2055. %</nmlm>
  2056.           namesleft #1 >
  2057.             { ", " * t * }
  2058.             {
  2059. %<and-com>              "," *
  2060. %<*!and-xcom&!and-com>
  2061.               numnames #2 >
  2062.                 { "," * }
  2063.                 'skip$
  2064.               if$
  2065. %</!and-xcom&!and-com>
  2066.               t "others" =
  2067. %<!etal-it>                { " et~al." * }
  2068. %<etal-it>                { " " * "et~al." emphasize * }
  2069. %<!amper>                { " and " * t * }
  2070. %<amper>                { " \& " * t * }
  2071.               if$
  2072.             }
  2073.           if$
  2074.         }
  2075.         't
  2076.       if$
  2077.       nameptr #1 + 'nameptr :=
  2078.       namesleft #1 - 'namesleft :=
  2079.     }
  2080.   while$
  2081. %</har|cay>
  2082. FUNCTION {author.key.label}
  2083. { author empty$
  2084.     { key empty$
  2085.         { cite$ #1 #3 substring$ }
  2086.         'key 
  2087.       if$
  2088.     }
  2089.     { author format.lab.names }
  2090.   if$
  2091. FUNCTION {author.editor.key.label}
  2092. { author empty$
  2093.     { editor empty$
  2094.         { key empty$
  2095.             { cite$ #1 #3 substring$ }
  2096.             'key  
  2097.           if$
  2098.         }
  2099.         { editor format.lab.names }
  2100.       if$
  2101.     }
  2102.     { author format.lab.names }
  2103.   if$
  2104. FUNCTION {editor.key.label}
  2105. { editor empty$
  2106.     { key empty$
  2107.         { cite$ #1 #3 substring$ }
  2108.         'key 
  2109.       if$
  2110.     }
  2111.     { editor format.lab.names }
  2112.   if$
  2113. FUNCTION {calc.label}
  2114. { type$ "book" =
  2115.   type$ "inbook" =
  2116.     'author.editor.key.label
  2117.     { type$ "proceedings" =
  2118.         'editor.key.label
  2119.         'author.key.label
  2120.       if$
  2121.     }
  2122.   if$
  2123. %<lab-it>  emphasize
  2124. %<!(har|ast|cay|alk|cn)>  "("
  2125. %<har|ast|cay|alk|cn>  ", "
  2126.   year duplicate$ empty$
  2127.      { pop$ "????" }
  2128.      { purify$ #-1 #4 substring$ }
  2129.   if$
  2130.   'label :=
  2131. %<*har|cay|ast|cn>
  2132. FUNCTION {calc.short.label}
  2133. { type$ "book" =
  2134.   type$ "inbook" =
  2135.     'author.editor.key.label
  2136.     { type$ "proceedings" =
  2137.         'editor.key.label
  2138.         'author.key.label
  2139.       if$
  2140.     }
  2141.   if$
  2142. %<lab-it>  emphasize
  2143.   'label :=
  2144. %</har|cay|ast|cn>
  2145. %<*har|cay>
  2146. %    \end{macrocode}
  2147. % \changes{1.1}{1993 Nov 12}{Add key labels to {\tt calc.long.label} and
  2148. %     get {\tt'author} and {\tt'editor} in right order when author missing}
  2149. %    \begin{macrocode}
  2150. FUNCTION {calc.long.label}
  2151. { type$ "book" =
  2152.   type$ "inbook" =
  2153.     { author empty$
  2154.         'editor
  2155.         'author
  2156.     if$
  2157.     }
  2158.     { type$ "proceedings" =
  2159.         'editor.key.label
  2160.         'author.key.label
  2161.       if$
  2162.     }
  2163.   if$
  2164.   format.long.lab.names
  2165. %<lab-it>  emphasize
  2166.   'long.label :=
  2167. %</har|cay>
  2168. %</ay>
  2169. FUNCTION {sort.format.names}
  2170. { 's :=
  2171.   #1 'nameptr :=
  2172.   s num.names$ 'numnames :=
  2173.   numnames 'namesleft :=
  2174.     { namesleft #0 > }
  2175.     { nameptr #1 >
  2176.         { "   " * }
  2177.         'skip$
  2178.       if$ 
  2179.       s nameptr 
  2180. %<!nm-init&!nm-rev&!nm-rev1&!nm-rv>      "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" 
  2181. %<nm-init|nm-rev|nm-rev1|nm-rv>      "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" 
  2182.       format.name$ 't := 
  2183.       nameptr numnames = t "others" = and
  2184.         { "et al" * }
  2185. %<*seq-lab>
  2186.         { numnames #2 > nameptr #2 = and
  2187.           { "zzzzzz" * #1 'namesleft := }
  2188.           { t sortify * }
  2189.         if$
  2190.         }
  2191. %</seq-lab>
  2192. %<!seq-lab>        { t sortify * }
  2193.       if$
  2194.       nameptr #1 + 'nameptr :=
  2195.       namesleft #1 - 'namesleft :=
  2196.     }
  2197.   while$
  2198. FUNCTION {sort.format.title}
  2199. { 't :=
  2200.   "A " #2
  2201.     "An " #3
  2202.       "The " #4 t chop.word
  2203.     chop.word
  2204.   chop.word
  2205.   sortify
  2206.   #1 global.max$ substring$
  2207. FUNCTION {author.sort}
  2208. { author empty$
  2209.     { key empty$
  2210.         { "to sort, need author or key in " cite$ * warning$
  2211.           ""
  2212.         }
  2213.         { key sortify }
  2214.       if$
  2215.     }
  2216.     { author sort.format.names }
  2217.   if$
  2218. FUNCTION {author.editor.sort}
  2219. { author empty$
  2220.     { editor empty$
  2221.         { key empty$
  2222.             { "to sort, need author, editor, or key in " cite$ * warning$
  2223.               ""
  2224.             }
  2225.             { key sortify }
  2226.           if$
  2227.         }
  2228.         { editor sort.format.names }
  2229.       if$
  2230.     }
  2231.     { author sort.format.names }
  2232.   if$
  2233. %<*ay>
  2234. FUNCTION {editor.sort}
  2235. { editor empty$
  2236.     { key empty$
  2237.         { "to sort, need editor or key in " cite$ * warning$
  2238.           ""
  2239.         }
  2240.         { key sortify }
  2241.       if$
  2242.     }
  2243.     { editor sort.format.names }
  2244.   if$
  2245. FUNCTION {presort}
  2246. { calc.label
  2247.   label sortify
  2248.   "    "
  2249.   type$ "book" =
  2250.   type$ "inbook" =
  2251.     'author.editor.sort
  2252.     { type$ "proceedings" =
  2253.         'editor.sort
  2254.         'author.sort
  2255.       if$
  2256.     }
  2257.   if$
  2258.   #1 entry.max$ substring$      
  2259.   'sort.label :=                
  2260.   sort.label                    
  2261.   "    "
  2262.   title field.or.null
  2263.   sort.format.title
  2264.   #1 entry.max$ substring$
  2265.   'sort.key$ :=
  2266. %</ay>
  2267. %</ay|!seq-no>
  2268. %<*!ay&!seq-no>
  2269. FUNCTION {author.organization.sort}
  2270. { author empty$
  2271.     { organization empty$
  2272.         { key empty$
  2273.             { "to sort, need author, organization, or key in " cite$ * warning$
  2274.               ""
  2275.             }
  2276.             { key sortify }
  2277.           if$
  2278.         }
  2279.         { "The " #4 organization chop.word sortify }
  2280.       if$
  2281.     }
  2282.     { author sort.format.names }
  2283.   if$
  2284. FUNCTION {editor.organization.sort}
  2285. { editor empty$
  2286.     { organization empty$
  2287.         { key empty$
  2288.             { "to sort, need editor, organization, or key in " cite$ * warning$
  2289.               ""
  2290.             }
  2291.             { key sortify }
  2292.           if$
  2293.         }
  2294.         { "The " #4 organization chop.word sortify }
  2295.       if$
  2296.     }
  2297.     { editor sort.format.names }
  2298.   if$
  2299. FUNCTION {presort}
  2300. { type$ "book" =
  2301.   type$ "inbook" =
  2302.     'author.editor.sort
  2303.     { type$ "proceedings" =
  2304.         'editor.organization.sort
  2305.         { type$ "manual" =
  2306.             'author.organization.sort
  2307.             'author.sort
  2308.           if$
  2309.         }
  2310.       if$
  2311.     }
  2312.   if$
  2313.   "    "
  2314.   year field.or.null sortify
  2315.   "    "
  2316.   title field.or.null
  2317.   sort.format.title
  2318.   #1 entry.max$ substring$
  2319.   'sort.key$ :=
  2320. %</!ay&!seq-no>
  2321. %<*(ay)|!seq-no>
  2322. ITERATE {presort}
  2323. SORT            
  2324. %</(ay)|!seq-no>
  2325. %<*ay>
  2326. STRINGS { last.label next.extra }       
  2327. INTEGERS { last.extra.num }             
  2328. FUNCTION {initialize.extra.label.stuff} 
  2329. { #0 int.to.chr$ 'last.label :=
  2330.   "" 'next.extra :=
  2331.   #0 'last.extra.num :=
  2332. FUNCTION {forward.pass}
  2333. { last.label label =
  2334.     { last.extra.num #1 + 'last.extra.num :=
  2335.       last.extra.num int.to.chr$ 'extra.label :=
  2336.     }
  2337.     { "a" chr.to.int$ 'last.extra.num :=
  2338.       "" 'extra.label :=
  2339.       label 'last.label :=
  2340.     }
  2341.   if$
  2342. FUNCTION {reverse.pass}
  2343. { next.extra "b" =
  2344.     { "a" 'extra.label := }
  2345.     'skip$
  2346.   if$
  2347.   extra.label 'next.extra :=
  2348. %<xlab-it>  extra.label emphasize 'extra.label :=
  2349. %<!(har|ast|cay|cn)>  label extra.label * 'label :=
  2350. EXECUTE {initialize.extra.label.stuff}
  2351. ITERATE {forward.pass}
  2352. REVERSE {reverse.pass}
  2353. FUNCTION {bib.sort.order}
  2354. { sort.label
  2355.   "    "
  2356.   year field.or.null sortify
  2357.   "    "
  2358.   title field.or.null
  2359.   sort.format.title
  2360.   #1 entry.max$ substring$
  2361.   'sort.key$ :=
  2362. %<har|cay|cn|ast>  calc.short.label
  2363. %<har|cay>  calc.long.label
  2364. ITERATE {bib.sort.order}
  2365. SORT            
  2366. %</ay>
  2367. %<*!ay>
  2368. STRINGS { longest.label }
  2369. INTEGERS { number.label longest.label.width }
  2370. FUNCTION {initialize.longest.label}
  2371. { "" 'longest.label :=
  2372.   #1 'number.label :=
  2373.   #0 'longest.label.width :=
  2374. FUNCTION {longest.label.pass}
  2375. %<*!ay&!cite>
  2376. { number.label int.to.str$ 'label :=
  2377.   number.label #1 + 'number.label :=
  2378. %</!ay&!cite>
  2379. %<!ay&cite>{ cite$ 'label := 
  2380.   label width$ longest.label.width >
  2381.     { label 'longest.label :=
  2382.       label width$ 'longest.label.width :=
  2383.     }
  2384.     'skip$
  2385.   if$
  2386. EXECUTE {initialize.longest.label}
  2387. ITERATE {longest.label.pass}
  2388. %</!ay>
  2389. FUNCTION {begin.bib}
  2390. { preamble$ empty$                              
  2391.     'skip$
  2392.     { preamble$ write$ newline$ }
  2393.   if$
  2394. %<ay>  "\begin{thebibliography}{}" write$ newline$           
  2395. %<!ay>  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  2396. EXECUTE {begin.bib}
  2397. EXECUTE {init.state.consts}
  2398. ITERATE {call.type$}
  2399. FUNCTION {end.bib}
  2400. { newline$
  2401.   "\end{thebibliography}" write$ newline$
  2402. EXECUTE {end.bib}
  2403. %</!options>
  2404. %    \end{macrocode}
  2405. % \Finale
  2406.